package com.cari.oa.service;

import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.cari.oa.dao.BaseDao;
import com.cari.oa.dao.SysUserDao;
import com.cari.oa.domain.SysUserEntity;
import com.cari.oa.util.StrUtils;
import com.cari.oa.util.Utils;

/**
 * 系统用户Service
 * User: yexuhui
 * Date: 12-12-10
 * Time: 下午6:24
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class SysUserService extends BaseService<SysUserEntity> {

    @Resource
    protected SysUserDao sysUserDao;

    /**
     * 根据英文名获取系统用户实体
     * @param userEnname 系统用户英文名
     * @return 系统实体对象
     */
    @Transactional(readOnly = true)
    public SysUserEntity getByEnname(String userEnname) {
        if(StrUtils.isEmpty(userEnname)) throw new RuntimeException("系统用户英文名不能为空");
        return sysUserDao.getByEnname(userEnname);
    }

    /**
     * 根据用户名和密码获取用户对象
     * @param enname 系统用户英文名
     * @param password 密码
     * @return 系统用户对象
     */
    @Transactional(readOnly = true)
    public SysUserEntity getByNameAndPass(String enname, String password) {
        return sysUserDao.getByNameAndPass(enname, Utils.md5(password));
    }

    /**
     * 判断该英文名实体对象是否存在
     * @param userEnname 系统用户英文名
     * @return 是否存在
     */
    @Transactional(readOnly = true)
    public boolean existByEnname(String userEnname) {
        return sysUserDao.existByEnname(userEnname);
    }

    /**
     * 根据系统用户英文名删除系统用户
     * @param userEnname 系统用户英文名
     */
    public void deleteByEnname(String userEnname) {
        SysUserEntity user = sysUserDao.getByEnname(userEnname);
        if(user == null) throw new RuntimeException("用户不存在: " + userEnname);
        sysUserDao.delete(user);
    }

    /**
     * 修改用户密码
     * @param userEnname 用户英文名
     * @param password 用户新密码
     */
    public void changePassword(String userEnname, String password) {
        SysUserEntity user = sysUserDao.getByEnname(userEnname);
        user.setPassword(Utils.md5(password));
        sysUserDao.update(user);
    }
    
    /**
     * 分页查询系统用户列表
     * @param userEnname 系统用户英文名
     * @param userCnname 系统用户中文名
     * @param status 系统用户状态
     * @param page 当前页
     * @param size 每页条数
     * @return 分页列表
     */
    @Transactional(readOnly = true)
    public List<SysUserEntity> getPage(String userEnname, String userCnname, Integer status, int page, int size) {
    	return sysUserDao.getPage(userEnname, userCnname, status, page, size);
    }
    
    /**
     * 系统用户查询记录条数
     * @param userEnname 系统用户英文名
     * @param userCnname 系统用户中文名
     * @param status 系统用户状态
     * @return 查询记录条数
     */
    @Transactional(readOnly = true)
    public long getCount(String userEnname, String userCnname, Integer status) {
    	return sysUserDao.getCount(userEnname, userCnname, status);
    }

    @Override
    public BaseDao<SysUserEntity> getDao() {
        return sysUserDao;
    }
    
    /**
	* Title: getUserAndRole
	* Description: 关联查询获取用户中文名称，英文名称，角色名称
	* @author    hjx 
	* @date      2013-1-17 
	* @return
	*/
    public List<Map<String,String>> getUserAndRole(String id)
    {
    	return sysUserDao.getUserAndRole(id);
    }

    /**
     * 分页查询通讯录信息
     * @author -- Heyyroup
     * @2013-3-19 下午5:02:24
     * @return
     */
    @Transactional(readOnly = true)
    public List<SysUserEntity> getContactPage(String name, String province, String deptNo, int page, int size){
    	return sysUserDao.getContactPage(name, province, deptNo, page, size);
    }
   
    /**
     * 查询符合条件的通讯录记录条数
     * @author -- Heyyroup
     * @2013-3-19 下午5:02:10
     */
    @Transactional(readOnly = true)
    public long getContactCount(String name, String province, String deptNo){
    	return sysUserDao.getContactCount(name, province, deptNo);
    }
}
